using System;

namespace WenYu.Core.Errors
{
    /// <summary>
    /// 错误文档配置 - 管理在线文档的URL映射
    /// </summary>
    public static class ErrorDocumentationConfig
    {
        /// <summary>
        /// 在线文档基础URL（可以通过环境变量或配置文件修改）
        /// </summary>
        public static string BaseUrl { get; set; } = "https://wenyu-lang.org/docs";
        
        /// <summary>
        /// GitHub文档URL（作为备选）
        /// </summary>
        public static string GitHubDocsUrl { get; set; } = "https://github.com/wenyu-lang/wenyu/tree/main/docs";
        
        /// <summary>
        /// 用户手册路径映射
        /// </summary>
        public static string GetUserManualUrl(string docName)
        {
            // 提取文档编号，例如 "【01-基础语法】" -> "01"
            var docNumber = ExtractDocNumber(docName);
            if (!string.IsNullOrEmpty(docNumber))
            {
                return $"{BaseUrl}/用户手册/{docNumber}";
            }
            
            return BaseUrl;
        }
        
        /// <summary>
        /// 示例代码路径映射
        /// </summary>
        public static string GetExampleUrl(string exampleFile)
        {
            // 例如 "examples/hello.wy" -> "{BaseUrl}/示例代码/hello"
            var fileName = exampleFile.Replace("examples/", "").Replace(".wy", "");
            return $"{BaseUrl}/示例代码/{fileName}";
        }
        
        /// <summary>
        /// 标准库函数文档映射
        /// </summary>
        public static string GetStandardLibUrl(string funcName = "")
        {
            if (string.IsNullOrEmpty(funcName))
            {
                return $"{BaseUrl}/用户手册/09-标准库函数";
            }
            return $"{BaseUrl}/用户手册/09-标准库函数#{funcName}";
        }
        
        /// <summary>
        /// 关键字速查表映射
        /// </summary>
        public static string GetKeywordReferenceUrl()
        {
            return $"{BaseUrl}/用户手册/08-关键字速查表";
        }
        
        /// <summary>
        /// 快速入门指南
        /// </summary>
        public static string GetQuickStartUrl()
        {
            return $"{BaseUrl}/用户手册/00-概述";
        }
        
        /// <summary>
        /// 从文档名称中提取编号
        /// </summary>
        private static string ExtractDocNumber(string docName)
        {
            // 支持格式：
            // "【01-基础语法】" -> "01-基础语法"
            // "01-基础语法" -> "01-基础语法"
            // "基础语法" -> null
            
            var startIndex = docName.IndexOf('【');
            var endIndex = docName.IndexOf('】');
            
            if (startIndex >= 0 && endIndex > startIndex)
            {
                return docName.Substring(startIndex + 1, endIndex - startIndex - 1);
            }
            
            // 尝试直接匹配 "01-xxx" 格式
            if (docName.Length >= 2 && char.IsDigit(docName[0]) && char.IsDigit(docName[1]))
            {
                var dashIndex = docName.IndexOf('-');
                if (dashIndex > 0)
                {
                    return docName.Substring(0, Math.Min(docName.Length, dashIndex + 20)); // 限制长度
                }
            }
            
            return "";
        }
        
        /// <summary>
        /// 尝试在浏览器中打开URL（仅Windows/Linux/Mac支持）
        /// </summary>
        public static bool TryOpenInBrowser(string url)
        {
            try
            {
                // 跨平台打开浏览器
                var psi = new System.Diagnostics.ProcessStartInfo
                {
                    FileName = url,
                    UseShellExecute = true
                };
                System.Diagnostics.Process.Start(psi);
                return true;
            }
            catch
            {
                return false;
            }
        }
    }
}

